// mock/auth.js
import Mock from 'mockjs'

// 使用 Mock.Random.image() 生成随机图片
const generateRandomAvatar = () => {
  return Mock.Random.image(
    '100x100', // 尺寸
    Mock.Random.color(), // 随机背景色
    '#FFF', // 文字颜色
    'Avatar' // 文字内容
  )
}

// 模拟用户数据
const userData = Mock.mock({
  // 基本信息对象
  baseInfo: {
    avatar: generateRandomAvatar(), // 头像
    nickname: '@cname()', // 昵称
    phone: /^1[3-9]\d{9}$/, // 手机号
    birthday: "@date('yyyy-MM-dd')", // 生日
    signature: '@cparagraph(1, 3)' // 签名
  },
  // 其他信息
  followCount: '@integer(0, 5000)', // 关注数
  fansCount: '@integer(0, 10000)', // 粉丝数
  followingCount: '@integer(0, 100)', // 再追数量
  historyCount: '@integer(0, 500)' // 历史数量
})

// 模拟用户数据
const users = [userData, userData, userData, userData]

console.log('模拟用户数据:', users)

// 存储验证码的临时对象
export const verificationCodes = {}

// 发送验证码接口处理函数
export const handleSendCode = (options) => {
  const { phone } = JSON.parse(options.body)

  // 验证手机号格式
  if (!/^1[3-9]\d{9}$/.test(phone)) {
    return {
      code: 400,
      msg: '手机号格式不正确',
      data: {}
    }
  }

  // 生成6位验证码
  const code = Mock.Random.string('number', 6)

  // 存储验证码（实际项目中应该存储到 Redis 等缓存中）
  verificationCodes[phone] = {
    code,
    timestamp: Date.now(),
    expires: 5 * 60 * 1000 // 5分钟过期
  }

  console.log(`手机号 ${phone} 的验证码是: ${code}`) // 开发环境下打印验证码

  return {
    code: 200,
    msg: '验证码发送成功',
    data: {
      phone,
      code, // 开发环境下返回验证码，方便测试
      expires: 300 // 过期时间（秒）
    }
  }
}

// 验证码登录接口处理函数
export const handleLogin = (options) => {
  const { phone, code } = JSON.parse(options.body)

  // 检查验证码是否存在
  const storedCode = verificationCodes[phone]
  if (!storedCode) {
    return {
      code: 400,
      msg: '请先获取验证码',
      data: null
    }
  }

  // 检查验证码是否过期
  if (Date.now() - storedCode.timestamp > storedCode.expires) {
    delete verificationCodes[phone]
    return {
      code: 400,
      msg: '验证码已过期',
      data: null
    }
  }

  // 验证验证码
  if (code !== storedCode.code) {
    return {
      code: 400,
      msg: '验证码错误',
      data: null
    }
  }

  // 查找用户
  let user = users.find((u) => u.baseInfo.phone === phone)

  // 如果用户不存在，创建新用户
  if (!user) {
    user = userData
    users.push(user)
  }

  console.log('登录用户:', user)

  // 清除验证码
  delete verificationCodes[phone]

  // 生成 token
  const token = Mock.Random.string('lower', 32)

  return {
    code: 200,
    msg: '登录成功',
    data: {
      user,
      token,
      expires: Date.now() + 7 * 24 * 60 * 60 * 1000 // 7天过期
    }
  }
}

// 获取用户信息接口处理函数
export const handleUserInfo = (options) => {
  // 模拟根据 token 获取用户信息
  const user = users[Math.floor(Math.random() * 4)] // 简化处理，实际应该根据 token 查找用户

  console.log('获取用户信息:', user)

  return {
    code: 200,
    msg: '获取成功',
    data: user
  }
}

// 更新用户信息接口处理函数
export const handleUpdateUserInfo = (options) => {
  // 解析请求体
  const updateData = JSON.parse(options.body)

  // 合并更新数据
  if (updateData.baseInfo) {
    Object.assign(userData.baseInfo, updateData.baseInfo)
  }

  // 更新其他信息
  Object.keys(updateData).forEach((key) => {
    if (key !== 'baseInfo' && userData.hasOwnProperty(key)) {
      userData[key] = updateData[key]
    }
  })

  return {
    code: 200,
    message: '更新成功',
    data: userData
  }
}
